package MiddlePractice;

import java.util.Arrays;

public class Demo309 {
//	309. 最佳买卖股票时机含冷冻期
//	给定一个整数数组，其中第 i 个元素代表了第 i 天的股票价格 。​
//
//	设计一个算法计算出最大利润。在满足以下约束条件下，你可以尽可能地完成更多的交易（多次买卖一支股票）:
//
//	你不能同时参与多笔交易（你必须在再次购买前出售掉之前的股票）。
//	卖出股票后，你无法在第二天买入股票 (即冷冻期为 1 天)。
	
	public int maxProfit(int[] prices) {
		
		memo = new int[prices.length];
		Arrays.fill(memo, -1);
		
		return getMaxProfit(0, prices);
		
    }
	
	private int[] memo;
	
	private int getMaxProfit(int buyDay, int[] prices) {	//准备在dayBuy天开始允许买入  最大收益
		if(buyDay >= prices.length) {
			return 0;
		}
		
		if(memo[buyDay] != -1) {
			return memo[buyDay];
		}
		
		int minPrice = prices[buyDay];
		int res = 0;
		for(int i=buyDay + 1; i<prices.length; i++) {
			//在dayBuy到i天之间的最低点买入
			minPrice = Math.min(minPrice, prices[i]);
			//隔天后买入  i+2
			res = Math.max(res, getMaxProfit(i+2, prices) + prices[i] - minPrice);
		}
		
		memo[buyDay] = res;
		
		return res;
	}
	
}
